package com.by.yz;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.os.StrictMode;
import android.util.Log;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
import com.by.yz.activity.HealthTopicActivity;
import com.by.yz.chatuidemo.Constant;
import com.by.yz.chatuidemo.DemoHelper;
import com.by.yz.chatuidemo.ui.ChatActivity;
import com.by.yz.handle.BaseExceptionHandler;
import com.by.yz.util.BitmapCache;
import com.hyphenate.EMMessageListener;
import com.hyphenate.chat.EMChatManager;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMMessage;
import com.hyphenate.chat.EMOptions;
import com.hyphenate.easeui.controller.EaseUI;
import com.hyphenate.easeui.domain.EaseUser;
import com.hyphenate.easeui.model.EaseAtMessageHelper;
import com.hyphenate.easeui.model.EaseNotifier;
import com.hyphenate.easeui.utils.EaseCommonUtils;

import org.xutils.x;

import java.net.CookieHandler;
import java.net.CookieManager;
import java.util.ArrayList;
import java.util.List;

import static com.hyphenate.easeui.utils.EaseUserUtils.getUserInfo;


/**
 * Created by asion on 9/17/16.
 */
/**
 *　　　　　　　　┏┓　　　┏┓+ +
 *　　　　　　　┏┛┻━━━┛┻┓ + +
 *　　　　　　　┃　　　　　　　┃ 　
 *　　　　　　　┃　　　━　　　┃ ++ + + +
 *　　　　　　 ████━████┃+
 *　　　　　　　┃　　　　　　　┃ +
 *　　　　　　　┃　　　┻　　　┃
 *　　　　　　　┃　　　　　　　┃ + +
 *　　　　　　　┗━┓　　　┏━┛
 *　　　　　　　　　┃　　　┃　　　　　　　　　　　
 *　　　　　　　　　┃　　　┃ + + + +
 *　　　　　　　　　┃　　　┃　　　　Code is far away from bug with the animal protecting　　　　　　　
 *　　　　　　　　　┃　　　┃ + 　　　　神兽保佑,代码无bug　　
 *　　　　　　　　　┃　　　┃
 *　　　　　　　　　┃　　　┃　　+　　　　　　　　　
 *　　　　　　　　　┃　 　　┗━━━┓ + +
 *　　　　　　　　　┃ 　　　　　　　┣┓
 *　　　　　　　　　┃ 　　　　　　　┏┛
 *　　　　　　　　　┗┓┓┏━┳┓┏┛ + + + +
 *　　　　　　　　　　┃┫┫　┃┫┫
 *　　　　　　　　　　┗┻┛　┗┻┛+ + + +
 /**
 * Created by 犇云守护者 on 2016/12/8.
 */
public class App extends Application{

    public static RequestQueue requestQueue;// 网络资源请求队列
    public static ImageLoader imageLoader;// 图片加载类
    public static App mInstance;//上下文
    private static boolean loginFlag = false;//登陆标记
    public  static CookieManager cookieManager;
    private EaseUI easeUI;
    ArrayList<Activity> list = new ArrayList<Activity>();
    //默认的异常处理
//    public static Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;

        requestQueue = Volley.newRequestQueue(getApplicationContext());// 网络资源请求队列
        imageLoader = new ImageLoader(requestQueue, new BitmapCache());// 图片加载类

//        先取得默认的异常处理handler
        BaseExceptionHandler crashHandler = BaseExceptionHandler.getInstance();
        // 注册crashHandler
        crashHandler.init(getApplicationContext(),mInstance);

        x.Ext.init(this);
        x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
        cookieManager = new CookieManager();
        CookieHandler.setDefault(cookieManager);

        EMOptions options = new EMOptions();
        options.setAcceptInvitationAlways(false);
        DemoHelper.getInstance().init(this,options);

        EMClient.getInstance().chatManager().addMessageListener(msgListener);

        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());

        init();
    }

    private void init(){

    }
    EMMessageListener msgListener = new EMMessageListener() {

        @Override
        public void onMessageReceived(List<EMMessage> messages) {
            EaseAtMessageHelper.get().parseMessages(messages);
            //收到消息
            Toast.makeText(getApplicationContext(), "卢棚这个傻逼来信息了", Toast.LENGTH_SHORT).show();
            Log.e("运行没有", "000");
        }

        @Override
        public void onCmdMessageReceived(List<EMMessage> messages) {
            //收到透传消息
        }

        @Override
        public void onMessageReadAckReceived(List<EMMessage> list) {
            Toast.makeText(getApplicationContext(), "卢棚这个傻逼来信息了", Toast.LENGTH_SHORT).show();
            Log.e("运行没有", "000");
        }

        @Override
        public void onMessageDeliveryAckReceived(List<EMMessage> list) {
            Toast.makeText(getApplicationContext(), "卢棚这个傻逼来信息了", Toast.LENGTH_SHORT).show();
            Log.e("运行没有", "000");
        }

        @Override
        public void onMessageChanged(EMMessage emMessage, Object o) {
            Toast.makeText(getApplicationContext(), "卢棚这个傻逼来信息了", Toast.LENGTH_SHORT).show();
            Log.e("运行没有", "000");
        }

    };
    /**
     * 获取登录标记
     *
     */
    public static boolean isLoginFlag() {
        return loginFlag;
    }

    /**
     * 设置登录标记
     *
     */
    public static void setLoginFlag(boolean loginFlag) {
        App.loginFlag = loginFlag;
    }

    /**
     * 首次使用，写入缓存token
     *
     * @param context
     */
    public static void cacheToken(Context context) {
        //SharedPreferences文件名com.by.yz 第二个参数指定文件的操作模式
        SharedPreferences.Editor e = context.getSharedPreferences(appConfig.APP_ID, Context.MODE_PRIVATE).edit();
        e.putString(appConfig.APP_KEY_TOKEN,"go");
        e.commit();
    }
    /**
     * 获取缓存token，判断是否首次使用
     *
     * @param context
     * @return
     */
    public static String getCacheToken(Context context) {
        return context.getSharedPreferences(appConfig.APP_ID, Context.MODE_PRIVATE).getString(appConfig.APP_KEY_TOKEN,
                null);
    }

    /**
     * 用户登录，写入用户缓存
     *
     * @param context
     */
    public static void cacheUserToken(Context context) {
        SharedPreferences.Editor e = context.getSharedPreferences(appConfig.APP_ID, Context.MODE_PRIVATE).edit();
        e.putString(appConfig.KEY_USER, "登陆了");
        e.commit();
    }

    /**
     * 获取用户缓存，判断是否已经登录
     *
     * @param context
     * @return
     */
    public static String getCacheUserToken(Context context) {
        return context.getSharedPreferences(appConfig.APP_ID, Context.MODE_PRIVATE).getString(appConfig.KEY_USER,
                null);
    }
    /**
     * 清除登陆缓存token
     *
     * @param context
     */
    public static void clearCacheUserToken(Context context) {
        SharedPreferences.Editor e = context.getSharedPreferences(appConfig.APP_ID, Context.MODE_PRIVATE).edit();
        e.remove(appConfig.KEY_USER);
        e.commit();
    }

    /**
     * 设置Cookie，进行账号登陆缓存
     *
     * @param context
     * @return
     */
    public static void setCacheUser(Context context, String[] data ){
        SharedPreferences.Editor e = context.getSharedPreferences(appConfig.APP_ID, Context.MODE_PRIVATE).edit();
        e.putString(appConfig.NUMBER, data[0]);
        e.putString(appConfig.PASSWORD, data[1]);
        e.commit();
    }
    /**
     * 获取账号缓存
     *
     * @param context
     * @return
     */
    public static String[]  getCacheUser(Context context) {
        String redata[] =new String[2];
        redata[0]= context.getSharedPreferences(appConfig.APP_ID, Context.MODE_PRIVATE).getString(appConfig.NUMBER,
                null);
        redata[1]=context.getSharedPreferences(appConfig.APP_ID,Context.MODE_PRIVATE).getString(appConfig.PASSWORD,null);

        return  redata;
    }
    /**
     * 获得全局上下文对象
     *
     * @return
     */
    public static App getInstance() {
        return mInstance;
    }
    public static boolean internet(){
        boolean inFlag;
        ConnectivityManager con=(ConnectivityManager)mInstance.getSystemService(Activity.CONNECTIVITY_SERVICE);
        boolean wifi=con.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
        boolean internet=con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
        if(wifi|internet){
            inFlag=true;
        }else{
            inFlag=false;
        }

        return inFlag;
    }

    /**
     * Activity关闭时，删除Activity列表中的Activity对象*/
    public void removeActivity(Activity a){
        list.remove(a);
    }

    /**
     * 向Activity列表中添加Activity对象*/
    public void addActivity(Activity a){
        list.add(a);
    }

    /**
     * 关闭Activity列表中的所有Activity*/
    public void finishActivity(){

        for (Activity activity : list) {
            if (null != activity) {
                activity.finish();
            }
        }
        //杀死该应用进程
        android.os.Process.killProcess(android.os.Process.myPid());
    }

}
